package com.ccp.dev.system.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import com.ccp.dev.system.model.Resources;
import com.ccp.dev.system.model.ResourcesUrlExt;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 资源信息model类
 * @author nd
 */
@Mapper
public interface ResourcesDao  extends IBaseMapper<Resources,String> {

    /**
     * 获取所有的公共资源
     * @param map 参数
     * @return 返回查询到的公共资源
     */
    List<Resources> queryAllPublicRes(Map map);

    /**
     * 根据roleType获取资源
     * @param map 参数
     * @return 返回根据roleType获取的资源信息
     */
    List<Resources> queryResourceByRoleType(Map map);

    /**
     * 根据资源别名list查询资源
     * @param list 参数
     * @return 返回根据局资源别名查询的资源信息
     */
    List<Resources> queryResourcesByAliass(List list);

    /**
     * 查询子资源
     * @param queryFilter 查询条件
     * @return 返回查询到的子资源
     */
    List<Resources> queryResourcesByTenantIdParentResIdSystemIdStatus(QueryFilter queryFilter);
    /**
     * 查询属于某系统的所有的公共资源（默认系统systemId=1）
     * @param map  参数
     * @return 返回属于某个系统的所有的公共资源
     */
    List<Resources> getBySystemId(Map map);


    /**
     * 查询属于某系统的所有的公共资源（默认系统systemId=1 默认顶级资源parentId=0）
     * @param map  查询条件集合
     * @return list
     */
    List<Resources> queryBySystemIdAndParentId(Map map);

    /**
     * 根据父id和租户id查资源集合
     * @param map 条件map
     * @return 返回根据父id和租户id查询到的资源集合
     */
    List<Resources> queryByParentIdAndTent(Map map);

    /**
     *  根据资源id和租户id查资源
     * @param map 条件map
     * @return 返回根据资源id和租户id查询到的资源
     */
    Resources getByIdAndTent(Map map);

    /**
     * 同级节点排序
     * @param param where条件map
     */
    void updateSn(Map<String,Object> param);

    /**
     * 查询源节点的所有子节点
     * @param params 条件map
     * @return 返回源节点下的所有的子节点的信息
     */
    List<Resources> getResByPath(Map<String,String> params);

    /**
     * 查询某url是否已存在
     * @param compUrl 要查询的url字符串
     * @return url集合List
     */
    List<Resources> queryByUrl(String compUrl);

    /**
     * 判断别名是否存在
     * @param params 参数map
     * @return 返回别名是否存在
     */
    Integer isAliasExists(Map<String,Object> params);

    /**
     * 根据租户和系统获取资源
     * @param map 参数
     * @return url集合List
     */
    List<Resources> queryBySystemIdAndTenId(Map map);

    List<String> queryResByResAlias(Map map);

    /**
     * 根据租户和系统获取资源
     * @param map 参数
     * @return url集合List
     */
    List<ResourcesUrlExt> queryDefaultUrlAndRoleByUrlSystemAliasList(Map map);

    /**
     * 查租户拥有的资源
     * @param map
     * @return 返回租户所拥有的资源
     */
    List<String> queryResourceIdByTenantId(Map map);
    /**
     * 查询菜单 用户能访问的菜单
     * @param param 查询条件
     * @return 返回用户能访问的菜单
     */
    List<Resources> queryResBySysAndUserAndRole(Map<String,Object> param);

    List<Resources> queryResNotInThreeNumberBySysAndUserAndRole(Map<String,Object> param);

    /**
     * 查询资源 根据系统id 租户id
     * @param param
     * @return 返回根据查询到的资源信息
     */
    List<Resources> queryResByTenantSystem(Map<String,Object> param);

    /**
     * 查询系统公共资源
     * @param map
     * @return 返回查询到的额系统公共资源
     */
    List<Resources> queryPublicResBySystem(Map map);

    /**
     * 由名称查资源
     * @param resName 资源名称
     * @return 返回resources对象
     */
    Resources getByResName(String resName);

    /**
     * 由别名查资源
     * @param alias 别名
     * @return 返回resources对象
     */
    Resources getByAlias(String alias);

    /**
     * 根据系统id查询该系统下所有资源
     * @param systemId 系统id
     * @return 返回根据系统id查询到的所有资源
     */
    List<Resources> queryAll(String systemId);

    /**
     * 根据resName resId查询资源是否存在
     * @param map 查询条件
     * @return 返回数量
     */
    int isExistsResName(Map<String, String> map);
    /**
     * 根据alias resId查询资源是否存在
     * @param map 查询条件
     * @return 返回数量
     */
    int isExistsAlias(Map<String, String> map);

    /**
     * 根据资源ids 查询资源名称
     * @param res list
     * @return  返回资源ids查询到的资源名称
     */
    List<String> queryResNameByResIds(List res);

    List<Resources> getBySysTenResStatusParent(Map<String, Object> map);

    /**
     * 根据父节点查询资源信息
     * @param parentId
     * @return 返回根据父节点查询到的资源信息
     */
    List<Resources> queryResByParentId(String parentId);

    /**
     * 查询该系统该角色下是否有此功能
     * @param systemId 系统id
     * @param roleId 角色id
     * @param function 功能别名
     * @return  ResourcesUrlExt
     */
    ResourcesUrlExt getFunctionBySystemIdAndRoleId(@Param("systemId") String systemId,@Param("roleId")String roleId,@Param("function")String function);
}
